Hợp nhất nhánh Git
Hợp nhất các chi nhánh
Chúng ta đã chuẩn bị sẵn bản sửa lỗi khẩn cấp và vì vậy hãy hợp nhất các nhánh chính và bản sửa lỗi khẩn cấp.
Đầu tiên chúng ta cần chuyển sang nhánh master:
Ví dụ
git checkout master Switched to branch 'master'
Bây giờ chúng tôi hợp nhất nhánh hiện tại (chính) với bản sửa lỗi khẩn cấp:
Ví dụ
git merge emergency-fix Updating 09f4acd..dfa79db Fast-forward index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Vì nhánh sửa lỗi khẩn cấp đến trực tiếp từ master và không có thay đổi nào khác được thực hiện đối với master trong khi chúng tôi đang làm việc, Git coi đây là sự tiếp nối của master. Vì vậy, nó có thể "Chuyển tiếp nhanh", chỉ cần trỏ cả bản chính và bản sửa lỗi khẩn cấp vào cùng một cam kết.
Vì hiện tại bản sửa lỗi chính và bản sửa lỗi khẩn cấp về cơ bản giống nhau nên chúng ta có thể xóa bản sửa lỗi khẩn cấp vì nó không còn cần thiết nữa:
Ví dụ
git branch -d emergency-fix Deleted branch emergency-fix (was dfa79db).
Hợp nhất xung đột
Bây giờ chúng ta có thể chuyển sang hình ảnh hello-world và tiếp tục làm việc. Thêm một tệp hình ảnh khác (img_hello_git.jpg) và thay đổi index.html, để nó hiển thị:
Ví dụ
git checkout hello-world-images Switched to branch 'hello-world-images'
Ví dụ
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World
from Space" style="width:100%;max-width:960px"></div>
<p>This is the first
file in my new Git Repo.</p>
<p>A new line in our file!</p>
<div><img
src="img_hello_git.jpg" alt="Hello Git"
style="width:100%;max-width:640px"></div>
</body>
</html>
Bây giờ, chúng tôi đã hoàn thành công việc của mình ở đây và có thể tiến hành và cam kết cho nhánh này:
Ví dụ
git add --all git commit -m "added new image" [hello-world-images 1f1584e] added new image 2 files changed, 1 insertion(+) create mode 100644 img_hello_git.jpg
Chúng tôi thấy rằng index.html đã được thay đổi ở cả hai nhánh. Bây giờ chúng ta đã sẵn sàng hợp nhất các hình ảnh hello-world-image vào master. Nhưng điều gì sẽ xảy ra với những thay đổi mà chúng tôi đã thực hiện gần đây trong bản gốc?
Ví dụ
git checkout master git merge hello-world-images Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result.
Việc hợp nhất không thành công vì có xung đột giữa các phiên bản của index.html. Hãy để chúng tôi kiểm tra trạng thái:
Ví dụ
git status On branch master You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Changes to be committed: new file: img_hello_git.jpg new file: img_hello_world.jpg Unmerged paths: (use "git add <file>..." to mark resolution) both modified: index.html
Điều này xác nhận có xung đột trong index.html nhưng các tệp hình ảnh đã sẵn sàng và được sắp xếp để cam kết.
Vì vậy chúng ta cần khắc phục xung đột đó. Mở tệp trong trình chỉnh sửa của chúng tôi:
Ví dụ
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link
rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello
world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from
Space" style="width:100%;max-width:960px"></div>
<p>This is the first file
in my new Git Repo.</p>
<<<<<<< HEAD
<p>This line is here to show how
merging works.</p>
=======
<p>A new line in our file!</p>
<div><img
src="img_hello_git.jpg" alt="Hello Git"
style="width:100%;max-width:640px"></div>
>>>>>>> hello-world-images
</body>
</html>
Chúng ta có thể thấy sự khác biệt giữa các phiên bản và chỉnh sửa nó theo ý muốn:
Ví dụ
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link
rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello
world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from
Space" style="width:100%;max-width:960px"></div>
<p>This is the first file
in my new Git Repo.</p>
<p>This line is here to show how
merging works.</p>
<div><img
src="img_hello_git.jpg" alt="Hello Git"
style="width:100%;max-width:640px"></div>
</body>
</html>
Bây giờ chúng ta có thể tạo trang index.html và kiểm tra trạng thái:
Ví dụ
git add index.html git status On branch master All conflicts fixed but you are still merging. (use "git commit" to conclude merge) Changes to be committed: new file: img_hello_git.jpg new file: img_hello_world.jpg modified: index.html
Xung đột đã được khắc phục và chúng ta có thể sử dụng cam kết để kết thúc việc hợp nhất:
Ví dụ
git commit -m "merged with hello-world-images after fixing conflicts" [master e0b6038] merged with hello-world-images after fixing conflicts
Và xóa nhánh hello-world-images:
Ví dụ
git branch -d hello-world-images Deleted branch hello-world-images (was 1f1584e).
Bây giờ bạn đã hiểu rõ hơn về cách thức hoạt động của các nhánh và việc hợp nhất. Đã đến lúc bắt đầu làm việc với kho lưu trữ từ xa!